import { Callout } from "nextra/components";

# Getting Workflow Run Results

It is possible to wait for or stream the results of a workflow run by getting a `WorkflowRunRef`. This is the return value of the `runWorkflow` and `getWorkflowRun` methods on the `hatchet.admin` client, or the `spawnWorkflow` method on a `Context` object. For example:

```ts filename="get-workflow-run.ts" copy
import Hatchet from "@hatchet-dev/typescript-sdk";

const hatchet = Hatchet.init();

const workflowRun = hatchet.admin.getWorkflowRun(
  "5a3a617d-1200-4ee2-92e6-be4bd27ca26f",
);
const result = await workflowRun.result();

console.log("workflow run result:", result);
```

This method takes the `workflow_run_id` as a parameter and returns a reference to the workflow run.

<Callout type="info" emoji="🪓">
If you need to get the workflow run id from a different method than where it was invoked, you can store the value of the `getWorkflowRunId` method of the return value of [`getWorkflow`](./run-workflow-api) or [`spawnWorkflow`](./run-workflow-child). For example:

```ts
const workflowRun = hatchet.admin.runWorkflow("ManualTriggerWorkflow", {
  test: "test",
});

const workflowRunId = await workflowRun.getWorkflowRunId();

console.log(`spawned workflow run: ${workflowRunId}`);
```

</Callout>

Note that the `result` method must be awaited. It returns a dict of each step run's result in the workflow. For example:

```ts
{
    "step1": {
        "result1": "success"
    },
    "step2": {
        "result2": "success"
    }
}
```

## Streaming Results

It is also possible to stream the results of a workflow run as each step is executed. This can be done via the `stream` method on the `WorkflowRunRef` object:

```ts filename="stream-workflow-run.ts" copy
import Hatchet from "@hatchet-dev/typescript-sdk";

const hatchet = Hatchet.init();

const workflowRun = hatchet.admin.getWorkflowRun(
  "5a3a617d-1200-4ee2-92e6-be4bd27ca26f",
);

const listener = workflowRun.stream();

for await (const event of listener) {
  console.log(event.type, event.payload);
}
```

Note that this is an async generator, so you must use `for await` to iterate over the events.
